from gmssl import sm3, func

def generate_salt(length=32):
    """生成指定长度的随机盐"""
    return func.random_hex(length)

def hash_with_salt(password, salt):
    """使用盐值对密码进行SM3哈希处理"""
    # 将密码和盐拼接起来
    data = password + salt
    # 使用SM3算法计算哈希
    hash_value = sm3.sm3_hash(func.bytes_to_list(data.encode()))
    return hash_value

def verify_password(input_password, salt, stored_hash):
    """验证输入的密码是否与存储的哈希匹配"""
    # 使用相同的盐值对输入密码进行哈希处理
    input_hash = hash_with_salt(input_password, salt)
    # 比较新生成的哈希与存储的哈希
    return input_hash == stored_hash

# 生成
password = "my_secure_password"
salt = generate_salt()  # 生成一个随机盐
hashed_password = hash_with_salt(password, salt)
print(f"Salt: {salt}")
print(f"Hashed Password: {hashed_password}")

# 验证
input_password = "my_secure_password"
stored_salt = salt  # 应该是从数据库中获取的盐值
stored_hash = hashed_password  # 应该是从数据库中获取的哈希值

is_valid = verify_password(input_password, stored_salt, stored_hash)
print("Password is valid:", is_valid)